.. code:: ipython3 import pandas as pd from seeq import spy # Set the compatibility option so that you maximize the chance that SPy will remain compatible with your notebook/script spy.options.compatibility = 192 .. code:: ipython3 # Log into Seeq Server if you're not using Seeq Data Lab: spy.login(url='http://localhost:34216', credentials_file='../credentials.key', force=False) Data Lab Visualizations ======================= Seeq Workbench provides many visualizations out-of-the-box, including the Trend view and XY Plot. You may find that a very specific type of visualization is helpful for a particular use case, and that you can produce this visualization using Python and one of the many open-source libraries at your disposal like `Matplotlib `__, `Plotly `__, and `Seaborn `__. Wouldn’t it be nice to push such visualizations into an Organizer Topic so that you can share them with colleagues, and potentially mix them in with Seeq trends, XY plots, or treemaps? You can do it easily using :doc:`Workbook Templates ` and this article walks you through it. (You may want to read about Workbook Templates first, but it’s not strictly necessary.) Creating a Template ------------------- First you must create an Organizer Topic template that will describe the form of the destination for the visualization. For the purposes of illustration, we will first push an Organizer Topic to Seeq so that you can see what the template looks like. Then we’ll use it to push a visualization. .. code:: ipython3 # Load the workbook templates from the documentation's Support folder workbooks = spy.workbooks.load('./Support Files/Workbook Templates.zip') # Grab just the Data Lab Visualization example data_lab_visualization_workbook = workbooks['Data Lab Visualization Example'] # Push it to Seeq spy.workbooks.push(data_lab_visualization_workbook) If you click on the *link* under the URL header of the green box above, you’ll see an Organizer Topic with a picture of a grumpy cat. Click on the grumpy cat image, and then select the **Change image text alternative** button: .. image:: ImageAltText.png When you do, you’ll see that the “text alternative” for the image is ``{{My Visualization 1}}``: .. image:: GrumpyCatMustache.jpg This “double curly-brace” syntax designates this image as a *mustache variable*. It will appear in the template parameters when you load this Topic as a template, as you will see below. This approach allows you to put any number of placeholder images in your Topic and give them each a different mustache variable name. For example, you may wish to create a table and put several placeholder images in various rows of the table, and you can size them and position them within their cell. Use the Template ---------------- Now that we’ve seen what the Topic looks like, let’s load it as a template and look at the code for the parameters: .. code:: ipython3 workbooks = spy.workbooks.load('./Support Files/Workbook Templates.zip', as_template_with_label=f'{spy.user.username} Data Lab Visualization') .. code:: ipython3 data_lab_visualization_template = workbooks['Data Lab Visualization Example'] print(data_lab_visualization_template.code) .. parsed-literal:: topic.parameters = { "[Image] My Visualization 1": None, "[AltText] My Visualization 1": None } As you can see, SPy has found the ``My Visualization 1`` mustache variable, and it has added two parameters to the template as follows: - ``"[Image] My Visualization 1"`` is where you will specify the filename for the image. It can be any image type that is recognized by a browser. The most common are ``.jpg`` or ``.png``. - ``"[AltText] My Visualization 1"`` is where you can (optionally) define what the alternative text for the image will be. Create a Visualization ---------------------- Now let’s pull some data and create a simple visualization using Matplotlib. .. code:: ipython3 import os import matplotlib.pyplot as plt from datetime import datetime, timedelta # Pull 10 hours of data to populate a histogram pull_df = spy.pull(spy.search({'Datasource Name': 'Example Data', 'Name': 'Area B_Relative Humidity'}), start=datetime.now() - timedelta(hours=10)) area_b_rh = pull_df['Area B_Relative Humidity'] .. code:: ipython3 # Create a histogram plot fig, ax = plt.subplots() ax.hist(area_b_rh, linewidth=0.5, edgecolor="white") # Save it to disk so we can use it in the template filename = 'my_data_lab_histogram.png' plt.savefig(filename) .. image:: Data_Lab_Visualizations_files/Data_Lab_Visualizations_14_0.png This simple histogram is the visualization we’ll push to the Topic via the template. Push to Organizer ----------------- Now refer to the place we saved it when filling out the template parameters. .. code:: ipython3 # Specify saved file as the parameter value. Note that you must supply a value for the [Image] # placeholder, but the [AltText] is optional -- you can leave it as None and it will just be # blank after pushing. data_lab_visualization_template.parameters = { "[Image] My Visualization 1": filename, "[AltText] My Visualization 1": "A histogram of the last 10 hours" } # Push it! spy.workbooks.push(data_lab_visualization_template) Click on the *link* underneath the URL header in the green box and you should see the histogram. .. code:: ipython3 # Clean up the image file we created os.remove(filename) Schedule it ----------- Chances are you have created a visualization that you want to be updated periodically. If you’re using Seeq Data Lab, that’s easy, just schedule it: .. code:: ipython3 # Uncomment the next line to run this notebook on a schedule # spy.jobs.schedule('every 1 day') .. code:: ipython3 # Uncomment the next line to cancel the schedule # spy.jobs.unschedule()